#include<bits/stdc++.h>
using namespace std;
const int N=1e6+9;
int T,n,sa[N],len[2*N];
bool cmp(string a,string b){
	for(int i=0;i<min(a.size(),b.size());i++){
		if(a[i]<b[i]) return 1;
		if(b[i]<a[i]) return 0;
	}
	if(a.size()<b.size()) return 1;
	return 0;
}
string t[10];
bool num[10];
char q[10];
bool check(string s){
	for(int i=0;i<s.size();i++) t[i]=s.substr(i);
	sort(t,t+s.size(),cmp);
	for(int i=0;i<s.size();i++)
		if(t[i].size()+sa[i+1]!=s.size()) return 0;
	for(int i=1;i<2*s.size();i++){
		if(i&1){
			int j=0;
			while(i/2-j!=0&&i/2+j!=s.size()-1&&s[i/2-j-1]==s[i/2+j+1]) j++;
			//if(2*j+1!=len[i]) cout<<i<<' '<<j<<endl;
			if(2*j+1!=len[i]) return 0;
		}
		else {
			int j=0;
			while(i/2-j+1!=0&&i/2+j!=s.size()-1&&s[i/2-j]==s[i/2+j+1]) j++;
			//if(2*j!=len[i]) cout<<i<<' '<<j<<endl;
			if(2*j!=len[i]) return 0;
		}
	}
	return 1;
}
bool check1(){
	for(int i=1;i<=n;i++)
		if(sa[i]!=n-i) return 0;
	return 1;
}
void solve(){
	cin>>n;
	for(int i=1;i<=n;i++) cin>>sa[i];
	for(int i=1;i<=2*n-1;i++) cin>>len[i];
	if(n<=8){
		string ans="";
		for(int i=0;i<(1<<(n-1));i++){
			for(int j=0;j<n-1;j++){
				if((i>>j)&1) num[j+2]=1;
				else num[j+2]=0;
			}
			int cnt=0;
			for(int j=1;j<=n;j++){
				if(num[j]) cnt++;
				q[sa[j]+1]=char('a'+cnt);
			}
			string s="";
			for(int j=1;j<=n;j++) s+=q[j];
			if(check(s))
				if(ans==""||cmp(s,ans)) ans=s;
		}
		if(ans=="") puts("-1");
		else cout<<ans<<'\n';
	}
	else if(check1()){
		int cnt=0;
		if(len[1]!=1){
			puts("-1");
			return;
		}
		for(int i=2;i<2*n;i++){
			if(!(len[i]==len[i-1]+1&&len[i]==len[i+1]-1)&&!(len[i]==len[i-1]-1&&len[i]==len[i+1]+1)&&!(len[i]==len[i-1]+1&&len[i]==len[i+1]+1)&&!(len[i]==0&&len[i-1]==1&&len[i+1]==1)){
				puts("-1");
				return;
			}
			if(!len[i]) cnt++;
		}
		if(len[2*n-1]!=1){
			puts("-1");
			return;
		}
		for(int i=1;i<=n;i++){
			cout<<char('a'+cnt);
			if(!len[2*i]) cnt--;
		}
		cout<<'\n';
	}
}
int main(){
	freopen("string.in","r",stdin);
	freopen("string.out","w",stdout);
	cin>>T;
	while(T--) solve();
	return 0;
}
